Extended a DWORD!!!

Otázka od: Peter Sulek

6. 11. 2002 8:58

Chcel by som sa opytat ze preco sa takyto vzorec:

var
    freeclus, BPC : DWORD;
    FreeClusters : Extended;

BPC := 4096
totclus := 1279175

FreeClusters := BPC* freeclus;

chova tak ze mi to proste vyrata inu hodnotu ako ma. Ide vlastne o vypocet
volneho miesta na disku cize su to velke cisla a ked dam tento vzorec do
watcheru tak mi vypise nieco taketo:
"Overflow in conversion or arithmetic
operation"

ale ked to prepisem takto:

FreeClusters := BPC* (freeclus/1);

tak to ide OK

Poradte preco sa to chova tak ako sa to chova?!

S pozdravom

Peter Sulek
psulek@centrum.sk

Odpovedá: ing. Jan Fiala

6. 11. 2002 9:15

Extended je realny typ. A pri hodne velkych cislech to nebude to prave
orechove. Nebyl by pro takove pripady pro vysledek lepsi typ Cardinal ?

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

6.11.2002 Peter Sulek:
> Chcel by som sa opytat ze preco sa takyto vzorec:

> var
> freeclus, BPC : DWORD;
> FreeClusters : Extended;

> BPC := 4096
> totclus := 1279175

> FreeClusters := BPC* freeclus;

Odpovedá: Marek Dostál

6. 11. 2002 9:31

Protoze to vyhodnucuje tak, ze nejprve nasobi typ DWORD * DWORD, pricemz
vysledek pravdepodobne pretece rozsah DWORD. Tim, ze tam das to "/1" zpusobi,
ze pri nasobeni se to uz nasobi jako extended, kde rozsah staci. Jina moznost
jak to osetrit je:

FreeClusters := BPC;
FreeClusters := FreeClusters* freeclus;



    Marek D.

----- Original Message -----
From: "Peter Sulek" <psulek@centrum.sk>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, November 06, 2002 8:48 AM
Subject: Extended a DWORD!!!


> Chcel by som sa opytat ze preco sa takyto vzorec:
>
> var
> freeclus, BPC : DWORD;
> FreeClusters : Extended;
>
> BPC := 4096
> totclus := 1279175
>
> FreeClusters := BPC* freeclus;
>
> chova tak ze mi to proste vyrata inu hodnotu ako ma. Ide vlastne o vypocet
> volneho miesta na disku cize su to velke cisla a ked dam tento vzorec do
> watcheru tak mi vypise nieco taketo:
"Overflow in conversion or arithmetic
> operation"
>
> ale ked to prepisem takto:
>
> FreeClusters := BPC* (freeclus/1);
>
> tak to ide OK
>
> Poradte preco sa to chova tak ako sa to chova?!
>
> S pozdravom
>
> Peter Sulek
> psulek@centrum.sk
>
>
>
>

Odpovedá: Peter Sulek

6. 11. 2002 9:45

To mi je jasne, ale potrebujem typ extended pre dalsie pouzitie ale moja
otazka je ze preco ked zmenim:
FreeClusters := BPC* freeclus;

na:
FreeClusters := BPC* (freeclus/1);

tak to uz ide ?